package jp.yvn.game.shooting.element;

import jp.yvn.game.shooting.logic.EnemyBehaviorPattern;
import jp.yvn.game.shooting.schedule.BaseStageSchedule;
import jp.yvn.game.shooting.util.Const;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.PointF;

/**
 * 敵フェアリー2オブジェクト
 * 
 * @author Yvn_pq
 */
public class EnemyFairy2Entity extends BaseEnemyEntity {

	/** 出現してる時間 */
	private static final float APPERANCE_TIME = 5.0f;

	/** 行動パターン */
	private static final int BEHAVIOR_PATTERN = EnemyBehaviorPattern.LINE;

	/** アニメ変更タイミング */
	private final int ANIM_CHANGE_POINT = 20;

	/** 停止用フレーム数カウント */
	private final int stopCnt = 0;

	/** 停止用フレーム数 */
	private final int STOP_FRAME = 120;

	private int mAnimNumber = 0;

	/** 敵アニメ用カウント */
	private int mEnemyAnimCnt = 0;

	/** 敵の向き(正面:true/横向き:false) */
	private final boolean isFront = false;

	/**
	 * コンストラクタ
	 * 
	 * @param context
	 * @param initX
	 * @param initRateY
	 * @param stopRateX
	 */
	public EnemyFairy2Entity(Context context, PointF startPoint, PointF endPoint, Point viewSize) {
		super(context, startPoint, endPoint, APPERANCE_TIME, viewSize, BEHAVIOR_PATTERN);
		halfWidth = Const.FAIRY_HALF_WIDTH;
		halfHeight = Const.FAIRY_HALF_HEIGHT;
		// 弾幕を設定します
		// setBullet();
	}

	/**
	 * 描画します
	 * 
	 * @param canvas
	 */
	@Override
	public void draw(Canvas canvas) {
		super.draw(canvas);

		// 正面の場合
		if (isFront) {
			canvas.drawBitmap(BaseStageSchedule.mFairy2FrontBitmapList[mAnimNumber], mCenterPoint.x - Const.FAIRY_HALF_WIDTH, mCenterPoint.y - Const.FAIRY_HALF_HEIGHT, null);
		}
		// 横向きの場合
		else {
			if (mBehaviorPattern.getSpeedX() < 0) {
				canvas.drawBitmap(BaseStageSchedule.mFairy2LeftBitmapList[mAnimNumber], mCenterPoint.x - Const.FAIRY_HALF_WIDTH, mCenterPoint.y - Const.FAIRY_HALF_HEIGHT, null);
			} else {
				canvas.drawBitmap(BaseStageSchedule.mFairy2RightBitmapList[mAnimNumber], mCenterPoint.x - Const.FAIRY_HALF_WIDTH, mCenterPoint.y - Const.FAIRY_HALF_HEIGHT, null);
			}
		}

		// アニメーション更新
		setAnimation();
	}

	/**
	 * アニメーションを設定します
	 */
	private void setAnimation() {
		// 特定のフレーム数で画像を変更
		if (mEnemyAnimCnt < ANIM_CHANGE_POINT) {
			mEnemyAnimCnt++;
		} else {
			mAnimNumber++;
			if ((BaseStageSchedule.BMP_FAIRY2_FRONT_ID.length <= mAnimNumber && isFront) || (BaseStageSchedule.BMP_FAIRY2_RIGHT_ID.length <= mAnimNumber && !isFront)) {
				mAnimNumber = 0;
			}
			mEnemyAnimCnt = 0;
		}
	}

	/*
	 * 弾幕を設定します
	 * 
	 * @see jp.yvn.game.shooting.element.BaseEnemyEntity#getBullet()
	 */
	public void setBullet() {
		// mBulletList = new ArrayList<BulletEntity>();
		// if (mBulletFireCnt < BULLET_FIRE_POINT) {
		// mBulletFireCnt++;
		// } else {
		// float bottomY = mCenterPoint.y + mBmpHalfHeight;
		// mBulletList.add(new BulletEntity(mContext,
		// BulletEntity.BULLET_TYPE_RING_BLUE, mCenterPoint.x, bottomY,
		// BULLET_SPEED,
		// BulletEntity.DIRECTION_TYPE_TO_BOTTOM, mViewSize));
		// mBulletFireCnt = 0;
		// }
	}
}
